package com.example.finalhomework.thirdhomework

import android.util.Log
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

// 定义一个 ViewModel 类，用于管理计时器的状态和逻辑
class FifthViewModel : ViewModel() {
    // 定义一个可变状态变量 seconds，用于存储计时器的秒数
    var seconds by mutableStateOf(0)
        private set // 私有设置器，外部无法修改（这样设置的原因：防止破坏对计时器状态的封装和控制，如果将seconds设置为公有，有可能会被意外修改，导致计数器功能出问题）

    // 定义一个可变状态变量 running，用于存储计时器是否正在运行
    var running by mutableStateOf(false)
        private set // 私有设置器，外部无法修改

    // 定义一个私有变量 timerStarted，用于标记计时器是否已经启动
    private var timerStarted = false

    // 初始化块，在 ViewModel 创建时启动一个协程，根据 running 和 timerStarted 的状态来更新 seconds 变量
    init {
        viewModelScope.launch { //启动协程
            while (true) { // 无限循环
                if (running && timerStarted) { // 如果计时器正在运行且已经启动
                    delay(1000) // 延迟 1 秒
                    seconds++ // 增加秒数
                    Log.d("FifthViewModel", "Timer running: $seconds seconds")
                } else {
                    delay(1000) // 如果计时器未运行，仍然延迟 1 秒
                }
            }
        }
    }

    // 启动计时器的方法
    fun startTimer() {
        running = true // 设置计时器为运行状态
        timerStarted = true // 标记计时器已经启动
        Log.d("FifthViewModel", "Timer started")
    }

    // 停止计时器的方法
    fun stopTimer() {
        running = false // 设置计时器为停止状态
        Log.d("FifthViewModel", "Timer stopped")
    }

    // 重置计时器的方法
    fun resetTimer() {
        running = false // 设置计时器为停止状态
        seconds = 0 // 重置秒数为 0
        timerStarted = true // 标记计时器已经启动
        startTimer() // 启动计时器
        Log.d("FifthViewModel", "Timer reset")
    }

    // 暂停计时器的方法
    fun pauseTimer() {
        running = false // 设置计时器为停止状态
        Log.d("FifthViewModel", "Timer paused")
    }

    // 恢复计时器的方法
    fun resumeTimer() {
        if (timerStarted) { // 如果计时器已经启动
            running = true // 设置计时器为运行状态
            Log.d("FifthViewModel", "Timer resumed")
        }
    }
}